package xin.mydreams.mybill.util;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.BeansException;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 获取spring全局变量
 * 
 * @Type SpringUtil.java
 * @Desc
 * @email guzehao@mydreams.xin
 * @author 谷泽昊
 * @date 2019年1月23日 下午5:30:39
 * @version
 */
@Component
public class SpringUtil implements ApplicationContextAware {

	private static ApplicationContext applicationContext;

	/**
	 * 获取applicationContext
	 * 
	 * @date Created at 2019年1月23日 下午5:30:33
	 * @email guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @return
	 */
	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	/**
	 * 通过name获取 Bean.
	 * 
	 * @date Created at 2019年1月23日 下午5:30:45
	 * @email guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @param name
	 * @return
	 */
	public static Object getBean(String name) {
		return getApplicationContext().getBean(name);
	}

	/**
	 * 通过class获取Bean.
	 * 
	 * @date Created at 2019年1月23日 下午5:30:50
	 * @email guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @param clazz
	 * @return
	 */
	public static <T> T getBean(Class<T> clazz) {
		return getApplicationContext().getBean(clazz);
	}

	/**
	 * 通过name,以及Clazz返回指定的Bean
	 * 
	 * @date Created at 2019年1月23日 下午5:30:55
	 * @email guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @param name
	 * @param clazz
	 * @return
	 */
	public static <T> T getBean(String name, Class<T> clazz) {
		return getApplicationContext().getBean(name, clazz);
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		if (SpringUtil.applicationContext == null) {
			SpringUtil.applicationContext = applicationContext;
		}
	}

	/**
	 * 全局获取request
	 * 
	 * @date Created at 2019年1月23日 下午5:31:00
	 * @email guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @return
	 */
	public static HttpServletRequest getRequest() {
		RequestAttributes ra = RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
		return request;
	}

	/**
	 * 获取项目启动目录
	 * 
	 * @date Created at 2019年5月12日 下午12:59:35
	 * @mail guzehao@mydreams.xin
	 * @author 谷泽昊
	 * @return
	 */
	public static String getPath() {
		ApplicationHome home = new ApplicationHome(SpringUtil.class);
		File jarFile = home.getSource();
		String path = jarFile.getParent();
		return path;
	}

}
